package visitor_pattern;

import java.util.ArrayList;

/**
 * @author 申书航
 * @version 1.0
 *
 * 客户类实现了可访问接口，代表一个顾客及其订单。
 */
public class Customer implements IVisitable{

    private String name;

    private final ArrayList<Order> orders;

    /**
     * 构造函数，初始化顾客姓名和订单列表。
     *
     * @param name 顾客姓名
     */
    public Customer(String name) {
        this.name = name;
        this.orders = new ArrayList<>();
    }

    /**
     * 接受访问者，允许访问者访问客户及其所有订单。
     *
     * @param visitor 访问者
     */
    @Override
    public void accept(IVisitor visitor) {
        visitor.visit(this);
        orders.forEach(order -> order.accept(visitor));
    }

    /**
     * 添加订单到顾客的订单列表中。
     *
     * @param order 要添加的订单
     */
    public void addOrder(Order order) {
        orders.add(order);
    }

    /**
     * 显示顾客信息，包括姓名和订单列表。
     */
    public void showInfo() {
        System.out.println("顾客姓名：" + name);
        System.out.println("顾客订单：");
    }
}
